package object.content;

import org.junit.Test;
import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;

/**
 * JOL测试
 *
 * @author <a href='https://gitee.com/hzf2281'>codefish</a>
 * @version 1.0.0
 * @since 2022/08/27 下午 08:28
 */
public class JolTest {

    @Test
    public void vmDetailTest() {
        //VM的细节情况
        System.out.println(VM.current().details());
        //所有对象的大小都被填充位为8字节的整数倍
        System.out.println("对象内存对齐的位数：" + VM.current().objectAlignment());
    }

    @Test
    public void customerInstanceLayoutTest() {
        Customer customer = new Customer();
        System.out.println(ClassLayout.parseInstance(customer).toPrintable());
    }

    /**
     * <pre>
     * 1. (默认)开启压缩指针：
     *    对象内存布局： 8 (mark word) + 4 (compressed class pointer) + 0 (instance data) + 4 （padding） = 16
     * 2. 关闭压缩指针：
     *     添加虚拟机参数： -XX:-UseCompressedClassPointers
     *      对象内存布局：  8 (mark word) + 8 (class pointer) + 0 (instance data) + 0 （no padding) = 16
     * </pre>
     */
    @Test
    public void compressedClassPointersTest(){
        Object obj = new Object();
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());
    }


}
